#!/bin/bash
# 查找未使用变量并添加下划线

ROOT=$1
MODULE=$2
# 对应不同文件夹下路径
DIR_SERVER="$ROOT/server/$MODULE"
DIR_SRC="$ROOT/server/src/$MODULE"
DIR_MODULE="$ROOT/server/src/mod/$MODULE"
ALL_MODULE="$ROOT/server/src/mod/**"
# 临时目录(存放编译中间文件)
TMP_DIR=$ROOT/server/temp

# 确定目录(兼容一下不同层级的目录)
if [ -d "$DIR_MODULE" ]; then
    DIR="$DIR_MODULE"
elif [ -d "$DIR_SRC" ]; then
    DIR="$DIR_SRC"
elif [ -d "$DIR_SERVER" ]; then
    DIR="$DIR_SERVER"
elif [ $MODULE = "all" ]; then
    echo "using all modules"
else
    echo "Directory not found: $DIR_MODULE"
    exit 2
fi
time1=$(date)
echo "Starting at: $time1"
# 1. 找出所有未使用的变量
# 例子: module_name.erl:112:18: Warning: variable 'UnusedVar' is unused
if [ $MODULE = "all" ]; then
    # todo 这里全搜索有点耗,主要原因应该是多次使用erlc导致的编译慢
    warnings=$(find $ROOT/server/src/mod -name "*.erl" -exec erlc +nowarn_export_all -o $TMP_DIR -E -Ddebug -I $ROOT/server/inc {} 2>&1 \; | grep "variable .* is unused")
else
    echo "using path: $DIR"
    # 使用building模块测试情况：
    #   $find 后 erlc 消耗时间8s
    #   $erlc 消耗时间2s
#    warnings=$(find $DIR -name "*.erl" -exec erlc +nowarn_export_all -o $TMP_DIR -E -Ddebug -I $ROOT/server/inc {} 2>&1 \; | grep "variable .* is unused")
    warnings=$(erlc +nowarn_export_all -o $TMP_DIR -E -Ddebug -I $ROOT/server/inc $DIR/*.erl 2>&1 | grep "variable .* is unused")
fi
time1=$(date)
echo "Finished at: $time1"

#echo "$warnings"
if [[ -n "$warnings" ]]; then
    # 2. 提取变量名和行号，并存储到数组中
    files=()
    vars=()
    lines=()
    while IFS= read -r warning; do
        file=$(echo "$warning" | sed -n "s/\(.*\).erl:.*:.*:.*/\1/p") # 提取文件名 module_name
        var=$(echo "$warning" | sed -n "s/.*variable '\(.*\)'.*/\1/p")  # 提取变量名 UnusedVar
        line=$(echo "$warning" | sed -n "s/.*erl:\([0-9]\+\).*/\1/p") # 提取行号 112
        files+=("$file")
        vars+=("$var")
        lines+=("$line")
    done <<< "$warnings"

    # 3. 打印变量和行号
#    echo "Variables: ${vars[@]}"
#    echo "Lines: ${lines[@]}"
#    echo "Files: ${files[@]}"
    # 4. 为每个变量添加下划线
    for ((i=0; i<${#vars[@]}; i++)); do
        # 使用转义引号来构建sed命令
        sed_command="s/\b${vars[i]}\b/_${vars[i]}/g"
        sed -i "${lines[i]}$sed_command" "$ROOT/server/${files[i]}.erl"
    done
fi
# 5. 删除临时文件
find $TMP_DIR -type f -name "*.E" -exec rm -f {} +
echo "Done!"